package ventanas;

import gestores.SistemaEmpresas;

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

import java.awt.CardLayout;

import clasesBasicas.Global;

import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Component;

public class ElFrame extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 386188677835263915L;
	private JFrame ventanaPrincipal;
	public static JPanel PanelPrincipal;
	public static final JPanel PanelCentral = new JPanel();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		// Se inicia un hilo , en el que se cargan todos los gestores con la
		// informacion de los ficheros.
		Runnable ejecutable = new Runnable() {
			public void run() {
				ElFrame eF = new ElFrame();
				Global.frame=eF;

				// Se muestra la ventana splash, que tiene un JProgressBar que
				// muestra el progreso de la carga
				
				eF.setVisible(true);

			}

		};

		// Se inicia el hilo tarea.
		Thread tarea = new Thread(ejecutable);
		tarea.start();
		
		Thread hilo= new Thread(new Runnable() {
			
			@Override
			public void run() {
				VentanaSplash splash = new VentanaSplash();
				splash.setVisible(true);

				try {

					int t = 0;
					int total = 10;

					// Tiempo que espera entre cada lectura de ficheros
					long sleept = 980L;

					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);

					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);

					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);

					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);

					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);

					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);

					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);

					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);
					
					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);
					
					t++;
					splash.progressBar.setValue(t * 100 / total);
					Thread.sleep(sleept);

				} catch (Exception e) {

					e.printStackTrace();

				}

				// Se cierra la ventana de carga y se inicia el programa
				splash.dispose();
				
			}
		});
		hilo.start();
	}

	/**
	 * Create the frame.
	 */
	public ElFrame() {
		ventanaPrincipal=this;
		// Titulo
		this.setTitle("IbexTrading v1.0");

		// Cursor de la ventana

		try {
			Global.sisEmp = new SistemaEmpresas();
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		colocarSkin();

		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		setSize(1024, 770);
		PanelPrincipal = new JPanel();
		PanelPrincipal.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(PanelPrincipal);
		PanelPrincipal.setLayout(new BorderLayout(0, 0));
		// Para colocar la aplicacion en el centro de la pantalla de cualquier
		// ordenador, ya que si le pusieramos cordenadas
		// dependiendo de cada ordenador saldria en una posicion diferente
		Toolkit toolkit = getToolkit();
		Dimension size = toolkit.getScreenSize();
		setLocation(size.width / 2 - getWidth() / 2, size.height / 2
				- getHeight() / 2);
		
		//cursor personalizado
		Cursor c=toolkit.createCustomCursor(new ImageIcon("imagenesBasicas/cursorFlecha.png").getImage(), new Point(0,0), "Cursor Paint");
		this.setCursor(c);


		// No se puede redimensionar
		setResizable(false);

		// Cambia el icono de la aplicacion por la imagen seleccionada
		ImageIcon icono = new ImageIcon("imagenesBasicas/graph-icon.png");
		this.setIconImage(icono.getImage());

		// Inicio PanelNorte
		Global.pNorte = new PanelNorte();
		PanelPrincipal.add(Global.pNorte, BorderLayout.NORTH);

		// fin PanelNorte

		// Inicio PAnelSur
		Global.pSur = new movimiento();
		PanelPrincipal.add(Global.pSur, BorderLayout.SOUTH);
		// Fin Panel sur

		// Inicio Panel Este
		PanelEste panelEste = new PanelEste();
		panelEste.setAlignmentY(Component.BOTTOM_ALIGNMENT);
		PanelPrincipal.add(panelEste, BorderLayout.EAST);
		// Fin Panel Este

		// Inicio PanelCentral

		PanelPrincipal.add(PanelCentral, BorderLayout.CENTER);
		PanelCentral.setLayout(new CardLayout(0, 0));

		Global.pNot = new PanelNoticias();
		Global.pEmp = new PanelEmpresa();
		Global.pLista = new PanelLista();

		PanelCentral.add(Global.pEmp);
		PanelCentral.add(Global.pNot);
		PanelCentral.add(Global.pLista);

		// Fin PanelCentral

		// Inicio PanelOeste
		Global.pOeste = new PanelOeste();
		PanelPrincipal.add(Global.pOeste, BorderLayout.WEST);
		// Fin PanelOeste

		// Temporizador para que?
		// Timer temporizador= new Timer(900000, new ActionListener() {
		//
		// @Override
		// public void actionPerformed(ActionEvent e) {
		// panelLista= new PanelLista();ini
		// PanelCentral.add(panelLista);
		//
		// }
		// });
		// temporizador.start();

		// Visibilidad inicial
		Global.pNot.setVisible(false);
		Global.pEmp.setVisible(false);
		Global.pLista.setVisible(true);

		// Cierre
		this.addWindowListener(new WindowAdapter() {

			public void windowClosing(WindowEvent we) {

				int eleccion = JOptionPane.showConfirmDialog(null,
						"¿Seguro que quieres salir de la aplicación?",
						"Saliendo del programa", 0,
						JOptionPane.WARNING_MESSAGE, new ImageIcon(
								"imagenesBasicas/logoSalida.jpg"));
				System.out.println(eleccion);

				if (eleccion == 0) {// Confirma que quiere salir
					JOptionPane.showMessageDialog(null,
							"Saliendo del programa IbexTrading.",
							"Cierre del programa", 0);
					cerrar(ventanaPrincipal);
				}
				if (eleccion == 1) {// Decide no salir
					//
				}

			}
		});
	}

	

	/**
	 * Cada 5 minutos se actualizan los valores del panel en movimiento,
	 *  lista principal y datos de cada empresa.
	 */
	public void actualizar() {
		Thread hiloActualizador = new Thread(new Runnable() {
			
			@Override
			public void run() {
				Global.pSur.texto.setText(Global.pSur.actualizarLinea());
				Global.pLista.modificarTabla();
				if(Global.pEmp.isVisible())
				{
					Global.pEmp.actualizarPEmpresa();
				}
				
			}
		});
		hiloActualizador.start();
		
	}

	public static void anadirPPref() {
		PanelCentral.add(Global.pPref);
	}

	public static void anadirPRan() {
		PanelCentral.add(Global.pRan);
	}

	public static void anadirPFav() {
		PanelCentral.add(Global.pFav);
	}

	public static void anadirPAdmin() {
		PanelCentral.add(Global.pAdministrar);
	}

	public static void anadirPMov() {
		PanelCentral.add(Global.pMovimientos);
	}

	public void colocarSkin() {
		try {
			UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
	}
	public static void cerrar(JFrame ventana)
	{
		ventana.setMinimumSize(new Dimension(0,0));
		Thread desaparecer = new HiloDesaparecer(ventana);
		desaparecer.start();
		
	}

}

class HiloDesaparecer extends Thread
{
	JFrame v;
	
	/** Constructor del hilo enviandole la ventana
	 * @param ventana La ventana que queremos que vaya disminuyendo
	 */
	HiloDesaparecer(JFrame ventana)
	{
		v=ventana;
	}
	
	public void run()
	{
		while(!(v.getSize().equals(new Dimension(178,47))))
		{
			v.setSize(new Dimension((int)v.getSize().getWidth()-6, (int)v.getSize().getHeight()-4));
			
			
		}
		System.out.println("Se cierra");
//		v.dispose();
		System.exit(MIN_PRIORITY);
		
	}
}

